package it.gestionedocumentale.spring.service;

import it.gestionedocumentale.hibernate.dao.GruppoDAO;
import it.gestionedocumentale.hibernate.sessionfactory.HibernateSessionFactory;
import it.gestionedocumentale.model.Gruppo;
import it.gestionedocumentale.struts.form.GruppoForm;

import java.util.List;

import org.hibernate.Transaction;
import org.springframework.beans.BeanUtils;

public class GruppoServiceImpl implements GruppoService {

	private GruppoDAO gruppoDAO;

	public void setGruppoDAO(GruppoDAO gruppoDAO) {
		this.gruppoDAO = gruppoDAO;
	}

	public GruppoDAO getGruppoDAO() {
		return gruppoDAO;
	}

	@Override
	public void save(Gruppo transientInstance) throws Exception {
		Transaction tx = HibernateSessionFactory.getSession()
				.beginTransaction();
		gruppoDAO.save(transientInstance);
		tx.commit();

	}

	@Override
	public void delete(Gruppo persistentInstance) throws Exception {
		Transaction tx = HibernateSessionFactory.getSession()
				.beginTransaction();
		gruppoDAO.delete(persistentInstance);
		tx.commit();
	}
	
	@Override
	public void update(GruppoForm gruppoForm) throws Exception {
		Transaction tx = HibernateSessionFactory.getSession()
			.beginTransaction();
		Gruppo gruppoDaModificare = gruppoDAO.findById(gruppoForm.getIdGruppo());
		BeanUtils.copyProperties(gruppoForm, gruppoDaModificare);
		tx.commit();
	}
	
	@Override
	public Gruppo findById(Long idGruppo) throws Exception {
		Transaction tx = HibernateSessionFactory.getSession()
				.beginTransaction();
		Gruppo gruppo = gruppoDAO.findById(idGruppo);
		tx.commit();
		return gruppo;
	}

	@Override
	public List<Gruppo> findByExample(Gruppo instance) throws Exception {
		Transaction tx = HibernateSessionFactory.getSession()
				.beginTransaction();
		List<Gruppo> gruppi = gruppoDAO.findByExample(instance);
		tx.commit();
		return gruppi;
	}

	@Override
	public List<Gruppo> findAll() throws Exception {
		Transaction tx = HibernateSessionFactory.getSession()
				.beginTransaction();
		List<Gruppo> gruppi = gruppoDAO.findAll();
		tx.commit();
		return gruppi.size() < 1 ? null : gruppi;
	}

}
